package com.me.myFramework.myAop.aop130.intercept.method;

import com.me.myFramework.myAop.aop130.intercept.Invocation;

import java.lang.reflect.Method;

/**
 * 自己实现 AOP-130：  <p></p>
 *
 * AOP联盟：该接口是执行方法增强的切面执行器，封装了如下公共逻辑：
 * 切面还没有执行完的话，就继续执行下一个切面，否则调用目标方法
 *
 * @author ME
 * @date 2021/9/26
 */
public interface MethodInvocation extends Invocation {

    /**
     * 执行此拦截点，并进入到下一个连接点
     *
     * @return 返回值
     * @throws Throwable Throwable
     */
    Object proceed() throws Throwable;

    /**
     * 返回保存当前连接点的对象，例如：调用的目标对象。
     *
     * @return 返回值
     */
    Object getThis();

    /**
     * 获取被调用的方法
     *
     * @return 被调用的方法
     */
    Method getMethod();

    /**
     * 获取被调用方法的参数
     *
     * @return 被调用方法的参数
     */
    Object[] getArgs();

}
